package main

import "fmt"

//每个包都允许有init函数，它优先于main函数执行。它不能有入参和返回
//在一个包引用链中，包的初始化是深度优先的。比如，有这样一个包引用关系：main→A→B→C，那么初始化顺序为 C.init→B.init→A.init→main
func init() {
	fmt.Println("init1:", a)
}

//同一个包甚至同一个源文件，可以有多个 init 函数。但执行顺序不保证
func init() {
	fmt.Println("init2:", b)
}

//变量和常量的定义，会优先于init之前执行
var a = 10

const b = 100

func main() {
	fmt.Println("main:", a)
}
